package common;

import java.util.*;
import java.lang.reflect.*;
import java.util.*;

public class ObjectBuilder
{
    private ClassLoader			sysLoader  = ClassLoader.getSystemClassLoader();
    private HashMap<String, String>	transTable = null;

    public ObjectBuilder()
    {
	transTable = new HashMap<String, String>();
    }

    public void setOnce(String key, String value)
    {
	transTable.put(key, value);
    }

    private Object makeClassObject(Object inst, HashMap<String, Object> fields)
    {
	//здесь надо преобразовать массивы/векторы и хеши 
	return null;
    }
    
    private Map makeMap(HashMap oMap)
    {
	Class		tmp;
	Constructor	cns;

	tmp = System.classForName(oMap.get("javaType"));
	Map tmap = tmp.newInstance();
	for(String key : oMap.keySet())
	    {
		
	    }
    }

    //надо для простоты заюзать гсон
    //полагаем что объекты конструируются с самого нижнего уровня
    public Object makeRealObject(HashMap oMap)
    {
	Class		tmp;
	Constructor	cns;
	//HashMap<String, Object> oMap = (HashMap<String, Object>)oMap_;


	
	try
	    {
		if(oMap.containsKey("bgtpType") == true)
		    {
			//значит какото класс
			tmp = sysLoader.loadClass(transTable.get(oMap.get("bgtpType")));
			cns = tmp.getConstructor();
			return makeClassObject(cns.newInstance(), oMap);
		    }
		else
		    {
			//иначе это просто хешмап
			//тип и параметризация в поле javaType
			return makeMap(oMap);
		    }

	    }
	catch(ClassNotFoundException cnfe)
	    {
		cnfe.printStackTrace();
	    }
	catch(NoSuchMethodException nsme)
	    {
		nsme.printStackTrace();
	    }
	catch(InstantiationException ie)
	    {
		ie.printStackTrace();
	    }
	catch(IllegalAccessException iae)
	    {
		iae.printStackTrace();
	    }
	catch(InvocationTargetException ite)
	    {
		ite.printStackTrace();
	    }
    }



}